package com.itawei.d2_filepractise;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 综合题
 * 需求：
 * 统计一个文件夹中每种文件的个数并打印。
 * 打印格式如下；
 * txt：3个
 * doc：4个
 * jpg：5个
 * a.txt
 * a.a.a.txt
 * aaa(不需要统计)
 */
public class Practise6 {
    public static void main(String[] args) {
    File file = new File("C:\\Program Files\\Java\\src");
        HashMap<String, Integer> count = getCount(file);
        System.out.println( count);
    }

    //定义一个方法 统计文件个数
    public static HashMap<String, Integer> getCount(File src) {
        //先进入src文件夹
        File[] files = src.listFiles();
        //创建一个集合 用于存储
        // a.txt 键：后缀名 值：个数
        HashMap<String, Integer> hm = new HashMap<>();
        //遍历数组
        if(files != null) {
            for (File f : files) {
                //此时遍历src文件夹中的所有files f代表每一个文件
                //判断 是否文件 统计个数
                if (f.isFile()) {
                    //是文件  统计个数
                    String[] name = f.getName().split("\\.");
                    //判断name数组中的长度
                    if (name.length >= 2) {
                        //代表有后缀名 取最大长度-1 为后缀名
                        String endname = name[name.length - 1];
                        //判断hm集合中是否有这个后缀名
                        if (hm.containsKey(endname)) {
                            //存在 就添加上去
                            Integer count = hm.get(endname);//获取这个后缀名对应的个数
                            count++;
                            hm.put(endname, count);
                        } else {
                            hm.put(endname, 1);
                        }
                    }

                }
                //不是文件而是文件夹 递归
                //sonMap 子文件夹中每一种文件的个数
                HashMap<String, Integer> sonMap = getCount(f);
                //hm txt:1 doc:1 iml:3
                //sonMap txt:1 doc:1 jpg:2
                //遍历sonMap就好了呀
                Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
                for (Map.Entry<String, Integer> entry : entries) {
                    String key = entry.getKey();//子文件中的后缀名
                    Integer value = entry.getValue();//文件的个数
                    //判断 hm 中是否有这个后缀名
                    if (hm.containsKey(key)) {
                        Integer count = hm.get(key);//文件个数
                        count = count + value;
                        hm.put(key, count);
                    } else {
                        hm.put(key, value);
                    }
                }
            }
        }
        return hm;


    }

}
